该内容已被发布者删除 该内容被自由微信恢复
文章于 2021年12月6日 被检测为删除。
查看原文
被用户删除
其他

JetBrains出了一个一款新神器:使用Kotlin开发适配多端的Web UI,网友:学不动了。。。

点击关注 👉 鸭哥聊Java 2021-11-29

大家好,我是鸭哥。


JetBrains 宣布了一款名为“Jetpack Compose for Web”的新工具,官方介绍称此项目基于 Google 现代 UI 工具包 Jetpack Compose,支持使用 Kotlin 编写响应式 Web UI。

Jetpack Compose 是用于构建原生界面的新款 Android 工具包。它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。UI 代码和预览如下图所示:

据介绍,Jetpack Compose for Web 可简化并加速 Web 应用的 UI 开发,目标是在 Web、桌面和 Android APP 之间实现 UI 代码共享,一套代码适应多端。目前处于技术预览阶段。
fun greet() = listOf("Hello", "Hallo", "Hola", "Servus").random()
renderComposable("greetingContainer") { var greeting by remember { mutableStateOf(greet()) } Button(attrs = { onClick { greeting = greet() } }) { Text(greeting) }} Result: Servus


使用 Compose for Web 构建用户界面


借助 Compose for Web,开发者通过使用 Kotlin 并应用 Jetpack Compose 的概念和 API 为 Web 构建响应式用户界面,以表达应用程序的状态、行为和逻辑。


可组合的 DOM API


  • 通过 DOM 元素和 HTML 标签表达设计和布局

  • 使用类型安全的 HTML DSL 构建 UI 表示形式

  • 通过使用类型安全的 CSS DSL 创建样式表来完全控制应用程序的外观

  • 通过 DOM 子树与其他 JavaScript 库集成

fun main() { renderComposable("root") { var platform by remember { mutableStateOf("a platform") } P { Text("Welcome to Compose for $platform! ") Button(attrs = { onClick { platform = "Web" } }) { Text("...for what?") } } A("https://www.jetbrains.com/lp/compose-web") { Text("Learn more!") } }}


具有 Web 支持的多平台小部件



示例代码


使用 Composable DOM 编写简单的计数器

fun main() { val count = mutableStateOf(0) renderComposable(rootElementId = "root") { Button(attrs = { onClick { count.value = count.value - 1 } }) { Text("-") } Span(style = { padding(15.px) }) { /* we use inline style here */ Text("${count.value}") } Button(attrs = { onClick { count.value = count.value + 1 } }) { Text("+") } }}

声明和使用样式表

object MyStyleSheet : StyleSheet() { val container by style { /* define a class `container` */ border(1.px, LineStyle.Solid, Color.RGB(255, 0, 0)) }}
@Composablefun MyComponent() { Div(attrs = { classes(MyStyleSheet.container) /* use `container` class */ }) { Text("Hello world!") }}
fun main() { renderComposable(rootElementId = "root") { Style(MyStyleSheet) /* mount the stylesheet */ MyComponent() }}

声明和使用 CSS 变量

object MyVariables : CSSVariables { val contentBackgroundColor by variable<Color>() /* declare a variable */}
object MyStyleSheet: StyleSheet() { val container by style { MyVariables.contentBackgroundColor(Color("blue")) /* set its value */ } val content by style { backgroundColor(MyVariables.contentBackgroundColor.value()) /* use it */ }}
@Composablefun MyComponent() { Div(attrs = { classes(MyStyleSheet.container) }) { Span(attrs = { classes(MyStyleSheet.content) }) { Text("Hello world!") } }}
作者:局长,来源:OSC开源社区

程序员技术交流群

有不少同学给鸭哥说,现在进大厂太难了!赚钱太难!因此,鸭哥特意邀请了华为、腾讯、阿里的朋友进群,与大家一起交流经验,一起增长技术。

有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群。

▲长按扫描



近期技术热文

1、干货篇:深入剖析 MySQL 索引和 SQL 调优实战

2、美团面试官:你知道 SELECT COUNT(*) 底层究竟干了啥吗?

3、美团面试题:MySql批量插入时,如何不插入重复的数据?

4、面试题:a==1 && a==2 && a==3 是 true 还是 false?

点击下方公众号
回复关键字【666
领取资料


我就知道你会点赞+“在看”

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存